Pipenv 是什麼呢?
想像一下,當你現在是個專業的工程師,身上背著十幾個不同類型的專案(好啦,有點誇張了),每個專案都需要用到不同的 Python 版本、套件,這時候如果沒有好好的管理的話,你電腦裡面應該已經裝了一堆套件,你的環境一片大混亂,A 專案要用到 X 套件的 3.9 版本,B 專案又要用到 X 套件的 2.8 版本,這時候不可能一下安裝一下移除。
這時候你一定想要每個專案都有一個虛擬的環境,每個虛擬環境之間互不影響,這樣就可以擁有一個乾淨的環境可以開發,而這個東西就是 pipenv ,而 pipenv 的位置正常會與專案擺放在一起。因為如果其他人也要 clone 整個專案時,可以直接根據 pipenv 所創建的套件管理的檔案 Pipfile
直接重建一個虛擬環境,不需要一個一個找需要裝什麼套件了。
那麼 pipenv 要怎麼安裝呢?
很簡單,在 CMD
中輸入
$ pip install pipenv
輸入完後按下 Enter
,等待執行完就安裝好了。
那麼 pipenv 要怎麼使用呢?
假設現在要開發一個新的專案,專案在 D:/ithome/
裡面,需要建立一個虛擬環境,首先要打開 CMD
切換到 D:/ithome/
(也可以透過檔案總管進到資料夾後直接在上方那條輸入 CMD
,就可以直接進去指定的位置了)。
進去後會長這樣,注意前面的路徑要確認是想要建立的位置,然後輸入
# 建立 Python 3 的環境
$ pipenv --three
# 建立 Python 2 的環境
$ pipenv --two
# 如果要指定版本的話用這行,前提是要有裝指定版本
$ pipenv --python 3.6
執行完後會長這樣
此時的檔案結構應該會像這樣
ithome
└── Pipfile
如果要在虛擬環境安裝套件,例如 requests
套件,就輸入
$ pipenv install requests
輸入完後按下 Enter
,等待執行完就安裝好了。如果要同時安裝多個不用一直打,只要加個空格繼續輸入就好了,例如:
$ pipenv install requests beautifulsoup4
執行完後會多出一個 Pipfile.lock
的檔案是正常的,此時的檔案結構應該會像這樣。
ithome
├── Pipfile
└── Pipfile.lock
如果要指定版本,就在後面加個 ==<version number>
,例如:
$ pipenv install requests==2.13.0
輸入以下指令就可以執行 Python 檔案了。
$ pipenv run python <file>
或是直接進入虛擬環境,然後就可以普通的執行了。
# 進入虛擬環境
$ pipenv shell
# 執行
$ python <file>
# 退出虛擬環境
$ exit
如果是其他人的專案,應該有機會看到 requirements.txt
這個檔案,這個是紀錄了需要安裝什麼套件的記錄檔(我也不太知道如何形容,所以姑且稱呼它為記錄檔),在建立虛擬環境時( pipenv --three
),如果專案裡面有 requirements.txt
會自動安裝好裡面的套件,如果需要產生 requirements.txt
的檔案就輸入
$ pipenv lock -r
如果建好環境後才找到 requirements.txt
(沒安裝到的意思),可以透過以下指令安裝
$ pipenv install -r requirements.txt
# 移除虛擬環境(Pipfile不會跟著刪除喔)
$ pipenv --rm
# 顯示虛擬環境信息
$ pipenv --venv
# 顯示虛擬環境中 Python 解釋器信息
$ pipenv --py
# 查看目前安裝的庫及其版本
$ pipenv graph
# 檢查安全漏洞
$ pipenv check
如果有較機密的資訊不方便放在程式裡面,可以使用 .env 檔儲存在專案根目錄(在哪裡?就是專案資料夾進去的位置,例如前面的 D:/ithome/
就是), pipenv run
或 pipenv shell
會自動讀取,並且可以透過 os.environ['<key>']
獲取。大概寫法長這樣:
SECRET_KEY = b'\x95\xb1\xb4r\xacz\xb6\xe3\xff\xe8\xdb\xd24\x16\xcc.'
那麼就大概這樣,虛擬環境弄好可以避免掉因為版本之類的問題而產生的隱藏 Bug 。
大家掰~掰~